package xin.clips.system.service.gy;

import xin.clips.common.core.domain.AjaxResult;
import xin.clips.system.domain.gy.GyDevice;
import xin.clips.system.dto.*;

import java.util.List;
import java.util.Map;


/**
 * 设备管理Service接口
 *
 * @author clips
 * @date 2023-03-15
 */
public interface IGyDeviceService
{
    /**
     * 查询设备管理
     *
     * @param deviceId 设备管理主键
     * @return 设备管理
     */
    public GyDevice selectGyDeviceByDeviceId(Long deviceId);

    /**
     * 查询设备管理列表
     *
     * @param gyDevice 设备管理
     * @return 设备管理集合
     */
    public List<GyDevice> selectGyDeviceList(GyDevice gyDevice);

    /**
     * 新增设备管理
     *
     * @param gyDevice 设备管理
     * @return 结果
     */
    public int insertGyDevice(GyDevice gyDevice);

    /**
     * 新增设备管理
     *
     * @param gyDevice 设备管理
     * @return 结果
     */
    public AjaxResult insert(GyDeviceDTO gyDevice);


    /**
     * 修改设备管理
     *
     * @param gyDevice 设备管理
     * @return 结果
     */
    public int updateGyDevice(GyDevice gyDevice);


    /**
     * 修改设备管理
     *
     * @param gyDevice 设备管理
     * @return 结果
     */
    public AjaxResult update(GyDeviceDTO gyDevice);

    /**
     * 批量删除设备管理
     *
     * @param deviceIds 需要删除的设备管理主键集合
     * @return 结果
     */
    public int deleteGyDeviceByDeviceIds(String deviceIds);

    /**
     * 删除设备管理信息
     *
     * @param deviceId 设备管理主键
     * @return 结果
     */
    public int deleteGyDeviceByDeviceId(Long deviceId);

    /**
     * 根据设备类型统计数量
     *
     * @param gyDevice 设备管理
     * @return 总数
     */
    public Integer selectGyDeviceByDeviceTypeAndStatus(GyDevice gyDevice);

    /**
     * 根据设备类型统计
     *
     * @param gyDevice 设备管理
     * @return 设备管理集合
     */
    public List<GyDevice> selectGyDeviceByDeviceType(GyDevice gyDevice);

    /**
     * 查询所有学院状态统计总数
     *
     * @param gyDevice 设备管理
     * @return 设备管理集合
     */
    public Integer selectDeviceStatusCountByLocations(GyDevice gyDevice);
    /**
     * 查询所有学院设备类型分类总数
     *
     * @param gyDevice 设备管理
     * @return 设备管理集合
     */
    public Integer selectDeviceStatusDistributeByLocations(GyDevice gyDevice);

    /**
     * 查询所有实时报警数据
     *
     * @param gyDevice 设备管理
     * @return 设备管理集合
     */
    public List<DeviceAlarmRecordDTO> selectDeviceStatusRecord(GyDevice gyDevice);


    /**
     * 设备种类数据为列表数据
     *
     * @param gyDevice 设备管理
     * @return 设备管理集合
     */
    public List<NameValueDataDTO> selectDeviceTypeCountRecord(GyDevice gyDevice) ;
    /**
     * 查询所有实时报警数据
     *
     * @param gyDevice 设备管理
     * @return 所有实时报警数据集合
     */
    public List<NameValueDataDTO> selectDeviceAlarmRecord(GyDevice gyDevice);

    /**
     *  根据学院编号查询学院下面的设备状态统计数据
     *
     * @param gyDevice 设备管理
     * @return 返回学院编号查询学院下面的设备分类统计数据
     */
    public List<Map> selectDeviceStatusTotalByLocationId(GyDevice gyDevice);

    /**
     *  根据学院编号查询学院下面的设备报警实时数据
     *
     * @param gyDevice 设备管理
     * @return 返回学院编号查询学院下面的设备报警实时数据
     */
    public List<DeviceAlarmRecordDTO> selectAlarmRecordByLocationId(GyDevice gyDevice);

    /**
     * 根据学院编号查询学院下面的所有设备
     *
     * @param gyDevice 设备管理
     * @return 返回学院编号查询学院下面的所有设备
     */
    public List<LocationDeviceDTO> selectDevicesByLocationId(GyDevice gyDevice);


    /**
     * 查询最大的id
     * @return
     */
    public Integer selectMaxId();


    /**
     * 设备分析，机床运行时间、产量统计
     * @return
     */
    public List<MachineInfoDTO>  selectDeviceMachineAnalyInfo(GyDevice gyDevice);


    /**
     * 返回设备总数
     *
     * @return 设备告警记录集合
     */
    public int selectTotal();

}


